package me.huha.zhime.pay.util.httpclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

/**
 * @Title: HttpRequestUtils
 * @Author: Yepx
 * @mail: yepx2013@gmail.com
 * @CreateTime: 2017年10月27日 上午10:09:08
 * @Todo: http 请求工具类
 */
public class HttpRequestUtils {
	
	/**
	  * 向指定URL发送GET方法的请求
	  *
	  * @param url
	  * 发送请求的URL
	  * @param param
	  * 请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
	  * @return URL 所代表远程资源的响应结果
	  */
	  public static String sendGet(String url, String param) {
		  String result = "";
		  BufferedReader in = null;
		  try {
			  String urlNameString = url + "?" + param;
			  URL realUrl = new URL(urlNameString);

			  // 打开和URL之间的连接
			  URLConnection connection = realUrl.openConnection();
			  // 设置通用的请求属性
			  connection.setRequestProperty("accept", "*/*");
			  connection.setRequestProperty("connection", "Keep-Alive");
			  connection.setRequestProperty("user-agent",
			  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			  // 建立实际的连接
			  connection.connect();
			  // 获取所有响应头字段
			  Map<String, List<String>> map = connection.getHeaderFields();
			  // 遍历所有的响应头字段
			  
			  for (String key : map.keySet()) {
			 	System.out.println(key + "--->" + map.get(key));
			  }
			  // 定义 BufferedReader输入流来读取URL的响应
			  in = new BufferedReader(new InputStreamReader(
			  connection.getInputStream()));
			  String line;
			  
			  while ((line = in.readLine()) != null) {
				  result += line;
			  }
		  } catch (Exception e) {
			  System.out.println("发送GET请求出现异常！" + e);
			  e.printStackTrace();
		  }
		  // 使用finally块来关闭输入流
		  finally {
			  try {
				  if (in != null) {
					  in.close();
				  }
			  } catch (Exception e2) {
				  e2.printStackTrace();
			  }
		  }
		  return result;
	  }

	 /**
	  * 向指定 URL 发送POST方法的请求
	  *
	  * @param url
	  * 发送请求的 URL
	  * @param param
	  * 请求参数，请求参数应该是 name1=value1&name2=value2 的形式。
	  * @return 所代表远程资源的响应结果
	  */
	  public static String sendPost(String url, String param) {
		  PrintWriter out = null;
		  BufferedReader in = null;
		  String result = "";
		  try {
			  URL realUrl = new URL(url);
			  // 打开和URL之间的连接
			  URLConnection conn = realUrl.openConnection();
			  // 设置通用的请求属性
			  conn.setRequestProperty("accept", "*/*");
			  conn.setRequestProperty("connection", "Keep-Alive");
			  conn.setRequestProperty("user-agent",
			  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
			  // 发送POST请求必须设置如下两行
			  conn.setDoOutput(true);
			  conn.setDoInput(true);
			  // 获取URLConnection对象对应的输出流
			  out = new PrintWriter(conn.getOutputStream());
			  // 发送请求参数
			  out.print(param);
			  // flush输出流的缓冲
			  out.flush();
			  
			  // 定义BufferedReader输入流来读取URL的响应
			  in = new BufferedReader(
			  new InputStreamReader(conn.getInputStream()));
			  String line;
			  while ((line = in.readLine()) != null) {
				  result += line;
			  }
		  } catch (Exception e) {
			  System.out.println("发送 POST 请求出现异常！"+e);
			  e.printStackTrace();
		  }
		  //使用finally块来关闭输出流、输入流
		  finally{
			  try{
				  if(out!=null){
					  out.close();
				  }
				  if(in!=null){
					  in.close();
				  }
			  }catch(IOException ex){
				  ex.printStackTrace();
			  }
		  }
		  return result;
	  }

}
